/**
 * 外观模式
 */
//  外观模式非常简单，体现的就是 Java 中封装的思想。将多个子系统封装起来，提供一个更简洁的接口供外部调用

// 新建浏览器类：
class Browser {
    static open() {
        console.log('打开 浏览器');
    }
    static close() {
        console.log('关闭 浏览器');
    }
}
// 新建IDE类：
class IDE {
    static open() {
        console.log('打开 IDE');
    }
    static close() {
        console.log('关闭 IDE');
    }
}
// 新建微信类：
class Wechat {
    static open() {
        console.log('打开 微信');
    }
    static close() {
        console.log('关闭 微信');
    }
}

class Facade {
    open() {
        Browser.open();
        IDE.open();
        Wechat.open();
    }

    close() {
        Browser.close();
        IDE.close();
        Wechat.close();
    }
}
const facade = new Facade();
console.log('上班:');
facade.open();
console.log('下班:');
facade.close();

// 外观模式就是这么简单，它使得两种不同的类不用直接交互，而是通过一个中间件——也就是外观类——间接交互。
// 外观类中只需要暴露简洁的接口，隐藏内部的细节，所以说白了就是封装的思想。

// 外观模式非常常用，（当然了！写代码哪有不封装的！）尤其是在第三方库的设计中，
// 我们应该提供尽量简洁的接口供别人调用。
// 另外，在 MVC 架构中，C 层（Controller）就可以看作是外观类，Model 和 View 层通过 Controller 交互，减少了耦合。
